﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Facade.Facade;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Logic.Linq;
using Crosland.Automotriz.Logic.Interfaces;
using Crosland.Automotriz.Core;
using System.Configuration;
using Crosland.Automotriz.Seguridad.ControlExeption;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmRegistroMetasGenerarCabecera : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        iFacadeRegistroMetas registroMetas = new FacadeRegistroMetas();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.ListaMetas();

                this.ListaArea();

                cboAreaM.SelectedIndex = 0;
                cboAreaN.SelectedIndex = 0;

                this.ListaTipoValor();
                this.ListaTipoMeta();

                cboTipoMetaM.SelectedIndex = 0;
                cboTipoMetaN.SelectedIndex = 0;
            }
        }

        private void ListaTipoValor()
        {
            try
            {
                IEnumerable<Object> list = new List<Object>();
                list = registroMetas.ListaTipoValor();
                cboTipoValorN.DataSource = list;
                cboTipoValorN.TextField = "DES_LARGA";
                cboTipoValorN.ValueField = "ID_GENERAL_DET";
                cboTipoValorN.DataBind();

                cboTipoValorM.DataSource = list;
                cboTipoValorM.TextField = "DES_LARGA";
                cboTipoValorM.ValueField = "ID_GENERAL_DET";
                cboTipoValorM.DataBind();


            }
            catch (DataException e)
            {
                MensajesError(e.Message, e, "ListaTipoValor");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "ListaTipoValor");
            }

        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "GuardarExceptionLog");
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }

        private void ListaMetas()
        {

            try
            {
                grdListaMetasCab.DataSource = registroMetas.ListaMetas();
                grdListaMetasCab.DataBind();
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "ListaMetas");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "ListaMetas");
            }


        }


        private void ListaArea()
        {
            iTablaGeneralDet itablageneralDet = new clsT_Mae_Tabla_General_DetLogic();
            IEnumerable<Object> list = new List<Object>();
            list = itablageneralDet.listaArea();
            cboAreaM.DataSource = list;
            cboAreaM.TextField = "DES_CORTA";
            cboAreaM.ValueField = "ID_GENERAL_DET";
            cboAreaM.DataBind();
            cboAreaN.DataSource = list;
            cboAreaN.TextField = "DES_CORTA";
            cboAreaN.ValueField = "ID_GENERAL_DET";
            cboAreaN.DataBind();

        }



        private void ListaTipoMeta()
        {

            IEnumerable<Object> list = new List<Object>();
            list = registroMetas.listaTipoMeta();
            cboTipoMetaM.DataSource = list;
            cboTipoMetaM.TextField = "DES_CORTA";
            cboTipoMetaM.ValueField = "ID_GENERAL_DET";
            cboTipoMetaM.DataBind();
            cboTipoMetaN.DataSource = list;
            cboTipoMetaN.TextField = "DES_CORTA";
            cboTipoMetaN.ValueField = "ID_GENERAL_DET";
            cboTipoMetaN.DataBind();

        }


        private void RegistrarMeta()
        {
            try
            {
                T_VEN_METAS_CAB t_ven_meta_cab = new T_VEN_METAS_CAB()
                {ID_UBIC_VEND_CAB = registroMetas.UltimoNumeroMetaCab() + 1,
                 Descripcion = txtDescripcionN.Text, 
                 ID_GENERAL_DET = Convert.ToInt32(cboAreaN.SelectedItem.Value),
                 ID_TIPO = Convert.ToInt32(cboTipoMetaN.SelectedItem.Value),
                 ID_TIPO_VALOR =Convert.ToInt32(cboTipoValorN.Value)
                };
                if (registroMetas.Insertar(t_ven_meta_cab))
                {


                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Se grabó correctamente";
                    PopupMsjSql.ShowOnPageLoad = true;
                }
                else
                {
                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Error al grabar verifique los datos";
                    PopupMsjSql.ShowOnPageLoad = true;
                }
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "RegistrarMeta");
                //lblMsjSql.Text = string.Empty;
                //lblMsjSql.Text = "ERROR: " ;
                //PopupMsjSql.ShowOnPageLoad = true;
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "RegistrarMeta");
                //lblMsjSql.Text = string.Empty;
                //lblMsjSql.Text = "ERROR: " + ex.Message;
                //PopupMsjSql.ShowOnPageLoad = true;
            }
        }

        private void ModificarMeta()
        {
            if (txtDescripcionM.Text.Trim() == "")
            {
                lblMsjSql.Text = "Debe ingresar la descripción.";
                PopupMsjSql.ShowOnPageLoad = true;
                return;
            }
            try
            {
                int? ID_TIPO;
                int id_ubicacion_vend_cab = Convert.ToInt32(grdListaMetasCab.GetRowValues(grdListaMetasCab.FocusedRowIndex, "ID_UBIC_VEND_CAB"));
                string descripcion = txtDescripcionM.Text;
                int ID_GENERAL_DET = Convert.ToInt32(cboAreaM.SelectedItem.Value);
                if (cboTipoMetaM.SelectedIndex==-1)
                {
                    ID_TIPO = null;
                }
                else
                {
                    ID_TIPO = Convert.ToInt32(cboTipoMetaM.SelectedItem.Value);
                }

                int id_tipo_Valor=cboTipoValorM.Text==""?0:Convert.ToInt32(cboTipoValorM.Value);
                if (registroMetas.Modificar(id_ubicacion_vend_cab, descripcion, ID_GENERAL_DET, ID_TIPO,id_tipo_Valor))
                {

                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Se actualizó correctamente";
                    PopupMsjSql.ShowOnPageLoad = true;
                }
                else
                {
                    lblMsjSql.Text = string.Empty;
                    lblMsjSql.Text = "Error al actualizar";
                    PopupMsjSql.ShowOnPageLoad = true;
                }
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "ModificarMeta");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "ModificarMeta");
            }
        }

        private void RecuperaDatosModificar()
        {
            int index = grdListaMetasCab.FocusedRowIndex;
            cboAreaM.Text = Convert.ToString(grdListaMetasCab.GetRowValues(index, "DES_AREA"));
            cboTipoMetaM.Text = Convert.ToString(grdListaMetasCab.GetRowValues(index, "DES_TIPO"));
            txtDescripcionM.Text = Convert.ToString(grdListaMetasCab.GetRowValues(index, "Descripcion"));
            cboTipoValorM.Value =Convert.ToInt32(grdListaMetasCab.GetRowValues(index, "ID_TIPO_VALOR"))==0?null: Convert.ToString(grdListaMetasCab.GetRowValues(index, "ID_TIPO_VALOR"));
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {

            if (grdListaMetasCab.FocusedRowIndex == -1)
            {
                lblMsjSql.Text = "Seleccione un registro por favor";
                PopupMsjSql.ShowOnPageLoad = true;
            }
            else
            {
                this.RecuperaDatosModificar();
                PCModificar.ShowOnPageLoad = true;
            }
        }

        protected void btnGrabarN_Click(object sender, EventArgs e)
        {
            this.RegistrarMeta();
            this.ListaMetas();
        }

        protected void btnGrabarM_Click(object sender, EventArgs e)
        {
            this.ModificarMeta();
            this.ListaMetas();
        }

        protected void grdListaMetasCab_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaMetas();
        }

        protected void grdListaMetasCab_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListaMetas();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Repuestos/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            PCNuevo.ShowOnPageLoad = true;
        }
    }
}